****************************** 데이터 타입 변환 함수와 연산자 ****************************** CAST ==== .. function:: CAST (cast_operand AS cast_target) **CAST** 연산자를 **SELECT** 문에서 어떤 값의 데이터 타입을 다른 데이터 타입으로 명시적으로 변환하는 데 사용할 수 있다. 조회 리스트 또는 **WHERE** 절의 값 수식을 다른 데이터 타입으로 변환할 수 있다. :param cast_operand: 다른 타입으로 변환할 값을 선언한다. :param cast_target: 변환할 타입을 지정한다. :rtype: cast_target 경우에 따라 **CAST** 연산자를 쓰지 않고 데이터 타입이 자동으로 변환될 수 있다. 이에 대한 자세한 내용은 :ref:`implicit-type-conversion` 을 참고한다. 문자열을 날짜/시간 타입으로 변환하는 것에 대한 자세한 내용은 :ref:`cast-string-to-datetime` 을 참고한다. CUBRID에서 **CAST** 연산자를 사용한 명시적인 타입 변환에 대해서 정리하면 다음의 표와 같다. +----------------+--------+--------+--------+--------+--------+--------+----------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **From \\ To** | **EN** | **AN** | **VC** | **FC** | **VB** | **FB** | **ENUM** | **BLOB** | **CLOB** | **D** | **T** | **UT** | **DT** | **S** | **MS** | **SQ** | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **EN** | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | No | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **AN** | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | No | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **VC** | Yes | Yes | Yes* | Yes* | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **FC** | Yes | Yes | Yes* | Yes* | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **VB** | No | No | Yes | Yes | Yes | Yes | No | Yes | Yes | No | No | No | No | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **FB** | No | No | Yes | Yes | Yes | Yes | No | Yes | Yes | No | No | No | No | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **ENUM** | No | No | Yes | Yes | No | No | Yes | No | No | No | No | No | No | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **BLOB** | No | No | No | No | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **CLOB** | No | No | Yes | Yes | No | No | Yes | No | Yes | No | No | No | No | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **D** | No | No | Yes | Yes | No | No | No | No | No | Yes | No | Yes | Yes | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **T** | No | No | Yes | Yes | No | No | No | No | No | No | Yes | No | No | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **UT** | No | No | Yes | Yes | No | No | No | No | No | Yes | Yes | Yes | Yes | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **DT** | No | No | Yes | Yes | No | No | No | No | No | Yes | Yes | Yes | Yes | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **S** | No | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **MS** | No | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **SQ** | No | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ `*` 이 경우에 **CAST** 연산은 값 수식과 변환할 데이터 타입이 같은 문자셋을 가질 경우에만 허용된다. * **데이터 타입 키** * **EN** : 정확한 수치(**INTEGER**, **SMALLINT**, **BIGINT**, **NUMERIC**, **DECIMAL**) * **AN** : 근사값 수치(**FLOAT/REAL**, **DOUBLE**, **MONETARY**) * **VC** : 가변 길이 문자열(**VARCHAR** (*n*)) * **FC** : 고정 길이 문자열(**CHAR** (*n*)) * **VB** : 가변 길이 비트열(**BIT VARYING** (*n*)) * **FB** : 고정 길이 비트열(**BIT** (*n*)) * **ENUM** : **ENUM** 타입 * **BLOB** : DB 외부에 저장하는 바이너리 데이터(**BLOB**) * **CLOB** : DB 외부에 저장하는 문자열 데이터(**CLOB**) * **D** : **DATE** * **T** : **TIME** * **DT** : **DATETIME** * **UT** : **TIMESTAMP** * **S** : **SET** * **MS** : **MULTISET** * **SQ** : **LIST** (= **SEQUENCE**) .. code-block:: sql --operation after casting character as INT type returns 2 SELECT (1+CAST ('1' AS INT)); (1+ cast('1' as integer)) =========================== 2 --cannot cast the string which is out of range as SMALLINT SELECT (1+CAST('1234567890' AS SMALLINT)); ERROR: Cannot coerce value of domain "character" to domain "smallint". --operation after casting returns 1+1234567890 SELECT (1+CAST('1234567890' AS INT)); (1+ cast('1234567890' as integer)) ==================================== 1234567891 --'1234.567890' is casted to 1235 after rounding up SELECT (1+CAST('1234.567890' AS INT)); (1+ cast('1234.567890' as integer)) ==================================== 1236 --'1234.567890' is casted to string containing only first 5 letters. SELECT (CAST('1234.567890' AS CHAR(5))); ( cast('1234.567890' as char(5))) ==================================== '1234.' --numeric type can be casted to CHAR type only when enough length is specified SELECT (CAST(1234.567890 AS CHAR(5))); ERROR: Cannot coerce value of domain "numeric" to domain "character". --numeric type can be casted to CHAR type only when enough length is specified SELECT (CAST(1234.567890 AS CHAR(11))); ( cast(1234.567890 as char(11))) ==================================== '1234.567890' --numeric type can be casted to CHAR type only when enough length is specified SELECT (CAST(1234.567890 AS VARCHAR)); ( cast(1234.567890 as varchar)) ==================================== '1234.567890' --string can be casted to time/date types only when its literal is correctly specified SELECT (CAST('2008-12-25 10:30:20' AS TIMESTAMP)); ( cast('2008-12-25 10:30:20' as timestamp)) ============================================= 10:30:20 AM 12/25/2008 SELECT (CAST('10:30:20' AS TIME)); ( cast('10:30:20' as time)) ================================================== 10:30:20 AM --string can be casted to TIME type when its literal is same as TIME’s. SELECT (CAST('2008-12-25 10:30:20' AS TIME)); ( cast('2008-12-25 10:30:20' as time)) ======================================== 10:30:20 AM --string can be casted to TIME type after specifying its type of the string SELECT (CAST(TIMESTAMP'2008-12-25 10:30:20' AS TIME)); ( cast(timestamp '2008-12-25 10:30:20' as time)) ================================================== 10:30:20 AM SELECT CAST('abcde' AS BLOB); cast('abcde' as blob) ====================== file:/home1/user1/db/tdb/lob/ces_743/ces_temp.00001283232024309172_1342 SELECT CAST(B'11010000' as varchar(10)); cast(B'11010000' as varchar(10)) ==================================== 'd0' SELECT CAST('1A' AS BLOB); cast('1A' as bit(16)) ================================= X'1a00' .. note:: * **CAST** 변환은 같은 문자셋을 가지는 데이터 타입끼리만 허용된다. * 근사치 데이터 타입(FLOAT, DOUBLE, MONETARY)이 정수형으로 변환되는 경우, 소수점 아래 자리가 반올림 처리된다. * 정확한 수치 데이터 타입(NUMERIC)이 정수형으로 변환되는 경우, 소수점 아래 자리가 반올림 처리된다. * 수치 데이터 타입을 문자열 타입으로 변환하는 경우, 문자열의 길이가 (모든 유효 숫자 자리 + 소수점) 이상이 되도록 충분하게 지정해야 한다. 그렇지 않으면 에러가 발생한다. * 문자열 타입 *A*\ 를 문자열 타입 *B*\ 로 변환하는 경우, *A*\ 의 길이 이상이 되도록 충분하게 지정되지 않으면 문자열 끝 부분이 삭제(truncate)되어 저장된다. * 문자열 타입 *A*\ 를 날짜/시간 데이터 타입 *B*\ 로 변환하는 경우, *A*\ 의 리터럴이 *B* 타입과 일치하는 경우에만 변환된다. 그렇지 않을 경우 에러가 발생한다. * 문자열로 저장된 수치 데이터는 명시적으로 타입 변환을 해주어야 산술 연산이 가능하다. DATE_FORMAT =========== .. function:: DATE_FORMAT (date, format) **DATE_FORMAT** 함수는 **DATE** 형식('*YYYY*-*MM*-*DD*' 또는 '*MM*/*DD*/*YYYY*')를 포함하는 문자열 또는 날짜/시간 타입(**DATE**, **TIMESTAMP**, **DATETIME**) 값을 지정된 날짜/시간 형식으로 변환하여 문자열로 출력하며, 리턴 값은 **VARCHAR** 타입이다. 지정할 *format* 인자는 아래의 :ref:`날짜/시간 형식 2 ` 표를 참고한다. :ref:`날짜/시간 형식 2 ` 표는 :func:`DATE_FORMAT` 함수, :func:`TIME_FORMAT` 함수, :func:`STR_TO_DATE` 함수에서 사용된다. :param date: **DATE** 형식('*YYYY*-*MM*-*DD*' 또는 '*MM*/*DD*/*YYYY*')를 포함하는 문자열 또는 날짜/시간 타입(**DATE**, **TIMESTAMP**, **DATETIME**) 값이 지정될 수 있다. :param format: 출력 형식을 지정한다. '%'로 시작하는 형식 지정자(specifier)를 사용한다. :rtype: STRING *format* 인자가 지정되면 지정된 언어에 맞는 형식으로 날짜를 출력한다. 이때 언어는 **intl_date_lang** 시스템 파라미터에 지정한 언어가 적용된다. 예를 들어 언어가 "de_DE"일 때 *format* 이 "%d %M %Y"인 경우 "2009년 10월 3일"인 날짜를 "3 Oktober 2009"인 문자열로 출력한다. **intl_date_lang** 값의 설정이 생략되면 **CUBRID_CHARSET** 환경변수에 지정한 언어가 적용된다. 주어진 문자열과 대응하지 않는 *format* 인자가 지정되면 에러를 반환한다. 아래 :ref:`날짜/시간 형식 2 ` 표에서 월 이름, 요일 이름, 일 이름, 오전/오후 이름 등은 언어에 따라 다르다. .. _datetime-format2: **날짜/시간 형식 2** +--------------+------------------------------------------------------------------------+ | format 값 | 의미 | +==============+========================================================================+ | %a | Weekday, 영문 약어 (Sun, ..., Sat) | +--------------+------------------------------------------------------------------------+ | %b | Month, 영문 약어 (Jan, ..., Dec) | +--------------+------------------------------------------------------------------------+ | %c | Month(1, ..., 12) | +--------------+------------------------------------------------------------------------+ | %D | Day of the month, 서수 영문 문자열(1st, 2nd, 3rd, ...) | +--------------+------------------------------------------------------------------------+ | %d | Day of the month, 두 자리 숫자(01, ..., 31) | +--------------+------------------------------------------------------------------------+ | %e | Day of the month (1, ..., 31) | +--------------+------------------------------------------------------------------------+ | %f | Milliseconds, 세 자리 숫자 (000, ..., 999) | +--------------+------------------------------------------------------------------------+ | %H | Hour, 24시간 기준, 두 자리 수 이상 (00, ..., 23, ..., 100, ...) | +--------------+------------------------------------------------------------------------+ | %h | Hour, 12시간 기준 두 자리 숫자 (01, ..., 12) | +--------------+------------------------------------------------------------------------+ | %I | Hour, 12시간 기준 두 자리 숫자 (01, ..., 12) | +--------------+------------------------------------------------------------------------+ | %i | Minutes, 두 자리 숫자 (00, ..., 59) | +--------------+------------------------------------------------------------------------+ | %j | Day of year, 세 자리 숫자 (001, ..., 366) | +--------------+------------------------------------------------------------------------+ | %k | Hour, 24시간 기준, 한 자리 수 이상 (0, ..., 23, ..., 100, ...) | +--------------+------------------------------------------------------------------------+ | %l | Hour, 12시간 기준 (1, ..., 12) | +--------------+------------------------------------------------------------------------+ | %M | Month, 영문 문자열 (January, ..., December) | +--------------+------------------------------------------------------------------------+ | %m | Month, 두 자리 숫자 (01, ..., 12) | +--------------+------------------------------------------------------------------------+ | %p | AM or PM | +--------------+------------------------------------------------------------------------+ | %r | Time, 12 시간 기준, 시:분:초 (hh:mm:ss AM or hh:mm:ss PM) | +--------------+------------------------------------------------------------------------+ | %S | Seconds, 두 자리 숫자 (00, ..., 59) | +--------------+------------------------------------------------------------------------+ | %s | Seconds, 두 자리 숫자 (00, ..., 59) | +--------------+------------------------------------------------------------------------+ | %T | Time, 24시간 기준, 시:분:초 (hh:mm:ss) | +--------------+------------------------------------------------------------------------+ | %U | Week, 두 자리 숫자, 일요일이 첫날인 주 단위 (00, ..., 53) | +--------------+------------------------------------------------------------------------+ | %u | Week, 두 자리 숫자, 월요일이 첫날인 주 단위 (00, ..., 53) | +--------------+------------------------------------------------------------------------+ | %V | Week, 두 자리 숫자, 일요일이 첫날인 주 단위 (01, ..., 53) | | | %X와 결합되어 사용 가능 | +--------------+------------------------------------------------------------------------+ | %v | Week, 두 자리 숫자, 월요일이 첫날인 주 단위 (01, ..., 53) | | | %x 와 결합되어 사용 가능 | +--------------+------------------------------------------------------------------------+ | %W | Weekday, 영문 문자열 (Sunday, ..., Saturday) | +--------------+------------------------------------------------------------------------+ | %w | Day of the week, 숫자 인덱스 (0=Sunday, ..., 6=Saturday) | +--------------+------------------------------------------------------------------------+ | %X | Year, 네 자리 숫자, 일요일이 첫날인 주 단위로 계산(0000, ..., 9999) | | | %V와 결합되어 사용 가능 | +--------------+------------------------------------------------------------------------+ | %x | Year, 네 자리 숫자, 월요일이 첫날인 주 단위로 계산(0000, ..., 9999) | | | %v와 결합되어 사용 가능 | +--------------+------------------------------------------------------------------------+ | %Y | Year, 네 자리 숫자 (0001, ..., 9999) | +--------------+------------------------------------------------------------------------+ | %y | Year, 두 자리 숫자 (00, 01, ..., 99) | +--------------+------------------------------------------------------------------------+ | %% | 특수문자 "%"를 그대로 출력하는 경우 | +--------------+------------------------------------------------------------------------+ | %x | 형식 지정자로 쓰이지 않는 영문자 중 임의의 문자 | | | x를 그대로 출력하는 경우 | +--------------+------------------------------------------------------------------------+ 다음은 시스템 파라미터 **intl_date_lang** 의 값이 "en_US"인 경우의 예이다. .. code-block:: sql SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y'); date_format('2009-10-04 22:23:00', '%W %M %Y') ====================== 'Sunday October 2009' SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s'); date_format('2007-10-04 22:23:00', '%H:%i:%s') ====================== '22:23:00' SELECT DATE_FORMAT('1900-10-04 22:23:00', '%D %y %a %d %m %b %j'); date_format('1900-10-04 22:23:00', '%D %y %a %d %m %b %j') ====================== '4th 00 Thu 04 10 Oct 277' SELECT DATE_FORMAT('1999-01-01', '%X %V'); date_format('1999-01-01', '%X %V') ====================== '1998 52' 다음은 시스템 파라미터 **intl_date_lang** 의 값이 "de_DE"인 경우의 예이다. .. code-block:: sql csql> ;se intl_date_lang="de_DE" SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y'); date_format('2009-10-04 22:23:00', '%W %M %Y') ====================== 'Sonntag Oktober 2009' SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s %p'); date_format('2007-10-04 22:23:00', '%H:%i:%s %p') ====================== '22:23:00 Nachm.' SELECT DATE_FORMAT('1900-10-04 22:23:00', '%D %y %a %d %m %b %j'); date_format('1900-10-04 22:23:00', '%D %y %a %d %m %b %j') ====================== '4 00 Do. 04 10 Okt 277' .. note:: * 환경 변수인 **CUBRID_CHARSET** 의 로캘 값을 언어만 "en_US"(CUBRID 제품 설치 시 **CUBRID_CHARSET** 의 초기 값)로 설정하고 "." 이하의 문자셋을 생략하는 경우, 문자셋은 ISO-8859-1(.iso88591)로 정해진다. * 문자셋이 ISO-8859-1인 경우 "en_US" 외에 시스템 파라미터 **intl_date_lang** 또는 환경 변수 **CUBRID_CHARSET** 에 의해 변경할 수 있는 언어는 "ko_KR"과 "tr_TR"뿐이다. 문자셋이 UTF-8인 경우 CUBRID가 지원하는 모든 언어 중 하나로 변경할 수 있다. 보다 자세한 설명은 :func:`TO_CHAR` 를 참고한다. FORMAT ====== .. function:: FORMAT ( x , dec ) **FORMAT** 함수는 숫자 *x* 의 형식이 *#,###,###.#####* 이 되도록, 소수점 위 세 자리마다 자릿수 구분 기호로 구분하고 소수점 기호 아래 숫자가 *dec* 만큼 표현되도록 *dec* 의 아랫자리에서 반올림을 수행한 결과를 **VARCHAR** 타입으로 반환한다. :param x: 수치 값을 반환하는 임의의 연산식이다. :param dec: 소수점 이하 자릿수 :rtype: STRING 자릿수 구분 기호와 소수점 기호는 지정한 언어에 맞는 형식으로 출력한다. 이때 언어는 **intl_number_lang** 시스템 파라미터에 지정한 언어가 적용되며, **intl_number_lang** 값의 설정이 생략되면 **CUBRID_CHARSET** 환경변수에 지정한 언어가 적용된다. 예를 들어 언어가 "de_DE"나 "fr_FR"과 같은 유럽 국가의 언어이면 "."를 숫자의 자릿수 구분 기호로 해석하고 ","를 소수점 기호로 해석한다(:ref:`언어별 숫자의 기본 출력 ` 참고). 다음은 시스템 파라미터 **intl_number_lang** 의 값을 "en_US"로 설정하여 수행한 예이다. .. code-block:: sql SELECT FORMAT(12000.123456,3), FORMAT(12000.123456,0); format(12000.123456, 3) format(12000.123456, 0) ============================================ '12,000.123' '12,000' 다음은 시스템 파라미터 **intl_number_lang** 의 값을 "de_DE"로 설정하여 생성한 데이터베이스에서 실행한 예이다. 독일, 프랑스 등 유럽 국가 대부분의 숫자 출력 형식은 "."가 자릿수 구분 기호이고, ","가 소수점 기호이다. .. code-block:: sql SELECT FORMAT(12000.123456,3), FORMAT(12000.123456,0); format(12000.123456, 3) format(12000.123456, 0) ============================================ '12.000,123' '12.000' STR_TO_DATE =========== .. function:: STR_TO_DATE (string, format) **STR_TO_DATE** 함수는 인자로 주어진 문자열을 지정된 형식에 따라 해석하여 날짜/시간 값으로 변환하며, :func:`DATE_FORMAT` 함수와 반대로 동작한다. 리턴 값은 문자열에 포함된 날짜 또는 시간 부분에 따라 타입이 결정되며, **DATETIME**, **DATE**, **TIME** 타입 중 하나이다. :param string: 모든 문자열 타입이 지정될 수 있다. :param format: 문자열 해석을 위한 형식을 지정한다. %를 포함하는 문자열을 형식 지정자(specifier)로 사용한다. :func:`DATE_FORMAT` 함수의 :ref:`날짜/시간 형식 2 ` 표를 참고한다. :rtype: DATETIME, DATE, TIME 지정할 *format* 인자는 :func:`DATE_FORMAT` 함수의 :ref:`날짜/시간 형식 2 ` 표를 참고한다. *string* 에 유효하지 않은 날짜/시간 값이 포함되거나, *format* 에 지정된 형식 지정자를 적용하여 문자열을 해석할 수 없으면 에러를 리턴한다. *format* 인자가 지정되면 지정된 언어에 맞는 형식으로 *string* 을 해석한다. 이때 언어는 **intl_date_lang** 시스템 파라미터에 지정한 언어가 적용된다. 예를 들어 언어가 "de_DE"일 때 *format* 이 "%d %M %Y"인 경우 "3 Oktober 2009"인 문자열을 "2009년 10월 3일"인 **DATE** 타입으로 해석한다. **intl_date_lang** 값의 설정이 생략되면 **CUBRID_CHARSET** 환경변수에 지정한 언어가 적용된다. 주어진 문자열과 대응하지 않는 *format* 인자가 지정되면 에러를 반환한다. 인자의 연, 월, 일에는 0을 입력할 수 없으나, 예외적으로 날짜와 시간이 모두 0인 값을 입력한 경우에는 날짜와 시간 값이 모두 0인 **DATE**, **DATETIME** 타입의 값을 반환한다. 그러나 JDBC 프로그램에서는 연결 URL 속성인 zeroDateTimeBehavior의 설정에 따라 동작이 달라진다. 이에 관한 자세한 내용은 :ref:`jdbc-connection-conf`\ 을 참고하면 된다. 다음은 시스템 파라미터 **intl_date_lang** 의 값이 "en_US"인 경우의 예이다. .. code-block:: sql SELECT STR_TO_DATE('01,5,2013','%d,%m,%Y'); str_to_date('01,5,2013', '%d,%m,%Y') ======================================= 05/01/2013 SELECT STR_TO_DATE('May 1, 2013','%M %d,%Y'); str_to_date('May 1, 2013', '%M %d,%Y') ========================================= 05/01/2013 SELECT STR_TO_DATE('13:30:17','%h:%i'); str_to_date('13:30:17', '%h:%i') ======================================== 01:30:00 PM SELECT STR_TO_DATE('09:30:17 PM','%r'); str_to_date('09:30:17 PM', '%r') ======================================= 09:30:17 PM SELECT STR_TO_DATE('0,0,0000','%d,%m,%Y'); str_to_date('0,0,0000', '%d,%m,%Y') ====================================== 00/00/0000 다음은 시스템 파라미터 **intl_date_lang** 의 값이 "de_DE"인 경우의 예이다. 독일어 Oktober가 10월로 해석된다. .. code-block:: sql SELECT STR_TO_DATE('3 Oktober 2009', '%d %M %Y'); str_to_date('3 Oktober 2009', '%d %M %Y') ============================================ 10/03/2009 .. note:: * 환경 변수인 **CUBRID_CHARSET** 의 로캘 값을 언어만 "en_US"(CUBRID 제품 설치 시 **CUBRID_CHARSET** 의 초기 값)로 설정하고 "." 이하의 문자셋을 생략하는 경우, 문자셋은 ISO-8859-1(.iso88591)로 정해진다. * 문자셋이 ISO-8859-1인 경우 "en_US" 외에 시스템 파라미터 **intl_date_lang** 또는 환경 변수 **CUBRID_CHARSET** 에 의해 변경할 수 있는 언어는 "ko_KR"과 "tr_TR"뿐이다. 문자셋이 UTF-8인 경우 CUBRID가 지원하는 모든 언어 중 하나로 변경할 수 있다. 보다 자세한 설명은 :func:`TO_CHAR` 를 참고한다. TIME_FORMAT =========== .. function:: TIME_FORMAT (time, format) **TIME_FORMAT** 함수는 **TIME** 형식(*HH*:*MI*:*SS*)을 포함하는 문자열 또는 **TIME**\ 을 포함하는 날짜/시간 타입(**TIME**, **TIMESTAMP**, **DATETIME**) 값을 지정된 시간 형식으로 변환하여 문자열로 출력하며, 리턴 값은 **VARCHAR** 타입이다. :param time: **TIME** 형식(*HH*:*MI*:*SS*)을 포함하는 문자열, **TIME**\ 을 포함하는 날짜/시간 타입(**TIME**, **TIMESTAMP**, **DATETIME**) 값을 지정할 수 있다. :param format: 문자열 해석을 위한 형식을 지정한다. %를 포함하는 문자열을 형식 지정자(specifier)로 사용한다. :func:`DATE_FORMAT` 함수의 :ref:`날짜/시간 형식 2 ` 표를 참고한다. :rtype: STRING *format* 인자가 지정되면 지정된 언어에 맞는 형식으로 날짜를 출력한다. 이때 언어는 **intl_date_lang** 시스템 파라미터에 지정한 언어가 적용된다. 예를 들어 언어가 "de_DE"일 때 *format* 이 "%h:%i:%s %p"인 경우 "08:46:53 PM"인 시간을 "08:46:53 Nachm."으로 출력한다. **intl_date_lang** 값의 설정이 생략되면 **CUBRID_CHARSET** 환경변수에 지정한 언어가 적용된다. 주어진 문자열과 대응하지 않는 *format* 인자가 지정되면 에러를 반환한다. 다음은 시스템 파라미터 **intl_date_lang** 의 값이 "en_US"인 경우의 예이다. .. code-block:: sql SELECT TIME_FORMAT('22:23:00', '%H %i %s'); time_format('22:23:00', '%H %i %s') ====================== '22 23 00' SELECT TIME_FORMAT('23:59:00', '%H %h %i %s %f'); time_format('23:59:00', '%H %h %i %s %f') ====================== '23 11 59 00 000' SELECT SYSTIME, TIME_FORMAT(SYSTIME, '%p'); SYS_TIME time_format( SYS_TIME , '%p') =================================== 08:46:53 PM 'PM' 다음은 시스템 파라미터 **intl_date_lang** 의 값이 "de_DE"인 경우의 예이다. .. code-block:: sql csql> ;se intl_date_lang="de_DE" SELECT SYSTIME, TIME_FORMAT(SYSTIME, '%p'); SYS_TIME time_format( SYS_TIME , '%p') =================================== 08:46:53 PM 'Nachm.' .. note:: * 환경 변수인 **CUBRID_CHARSET** 의 로캘 값을 언어만 "en_US"(CUBRID 제품 설치 시 **CUBRID_CHARSET** 의 초기 값)로 설정하고 "." 이하의 문자셋을 생략하는 경우, 문자셋은 ISO-8859-1(.iso88591)로 정해진다. * 문자셋이 ISO-8859-1인 경우 "en_US" 외에 시스템 파라미터 **intl_date_lang** 또는 환경 변수 **CUBRID_CHARSET** 에 의해 변경할 수 있는 언어는 "ko_KR"과 "tr_TR"뿐이다. 문자셋이 UTF-8인 경우 CUBRID가 지원하는 모든 언어 중 하나로 변경할 수 있다. 보다 자세한 설명은 :func:`TO_CHAR` 를 참조한다. TO_CHAR(date_time) =================== .. function:: TO_CHAR ( date_time [, format[, date_lang_string_literal ]] ) **TO_CHAR** (date_time) 함수는 날짜/시간 타입(**TIME**, **DATE**, **TIMESTAMP**, **DATETIME**) 값을 :ref:`날짜/시간 형식 1 ` 표에 따라 문자열로 변환하여 이를 반환하며, 리턴 값의 타입은 **VARCHAR** 이다. :param date_time: 날짜/시간 타입의 연산식을 지정한다. 값이 **NULL** 인 경우에는 **NULL** 이 반환된다. :param format: 리턴 값의 형식을 지정한다. 값이 **NULL** 인 경우에는 **NULL** 이 반환된다. :param date_lang_string_literal: 리턴 값에 적용할 언어를 지정한다. :rtype: STRING *format* 인자가 지정되면 지정한 언어에 맞는 형식으로 *date_time* 을 출력한다. 자세한 형식은 :ref:`날짜/시간 형식 1 ` 표를 참고하면 된다. 언어는 *date_lang_string_literal* 인자에 의해 정해진다. 예를 들어 언어가 "de_DE"일 때 *format* 이 "HH:MI:SS AM"인 경우 "08:46:53 PM"인 시간을 "08:46:53 Nachm."으로 출력한다. *date_lang_string_literal* 인자가 생략되면 **intl_date_lang** 시스템 파라미터에 지정한 언어가 적용되며, **intl_date_lang** 값의 설정이 생략되면 **CUBRID_CHARSET** 환경변수에 지정한 언어가 적용된다. 주어진 문자열과 대응하지 않는 *format* 인자가 지정되면 에러를 반환한다. *format* 인자가 생략되면 **intl_date_lang** 또는 **CUBRID_CHARSET** 에 의해 설정된 언어의 기본 출력 형식을 따라 *date_time* 을 문자열로 출력한다(아래 :ref:`날짜/시간 타입에 대한 언어별 기본 출력 형식` 표 참고). .. note:: CUBRID 9.0 미만 버전에서 사용되었던 **CUBRID_DATE_LANG** 환경 변수는 더 이상 사용되지 않는다. .. _tochar-default-datetime-format: **날짜/시간 타입에 대한 언어별 기본 출력 형식** +-------+----------------+---------------+---------------------------+------------------------------+ | 언어 | DATE | TIME | TIMESTAMP | DATETIME | +=======+================+===============+===========================+==============================+ | en_US | 'MM/DD/YYYY' | 'HH:MI:SS AM' | 'HH:MI:SS AM MM/DD/YYYY' | 'HH:MI:SS.FF AM MM/DD/YYYY' | +-------+----------------+---------------+---------------------------+------------------------------+ | de_DE | 'DD.MM.YYYY' | 'HH24:MI:SS' | 'HH24:MI:SS DD.MM.YYYY' | 'HH24:MI:SS.FF DD.MM.YYYY' | +-------+----------------+---------------+---------------------------+------------------------------+ | es_ES | 'DD.MM.YYYY' | 'HH24:MI:SS' | 'HH24:MI:SS DD.MM.YYYY' | 'HH24:MI:SS.FF DD.MM.YYYY' | +-------+----------------+---------------+---------------------------+------------------------------+ | fr_FR | 'DD.MM.YYYY' | 'HH24:MI:SS' | 'HH24:MI:SS DD.MM.YYYY' | 'HH24:MI:SS.FF DD.MM.YYYY' | +-------+----------------+---------------+---------------------------+------------------------------+ | it_IT | 'DD.MM.YYYY' | 'HH24:MI:SS' | 'HH24:MI:SS DD.MM.YYYY' | 'HH24:MI:SS.FF DD.MM.YYYY' | +-------+----------------+---------------+---------------------------+------------------------------+ | ja_JP | 'YYYY/MM/DD' | 'HH24:MI:SS' | 'HH24:MI:SS YYYY/MM/DD' | 'HH24:MI:SS.FF YYYY/MM/DD' | +-------+----------------+---------------+---------------------------+------------------------------+ | km_KH | 'DD/MM/YYYY' | 'HH24:MI:SS' | 'HH24:MI:SS DD/MM/YYYY' | 'HH24:MI:SS.FF DD/MM/YYYY' | +-------+----------------+---------------+---------------------------+------------------------------+ | ko_KR | 'YYYY.MM.DD' | 'HH24:MI:SS' | 'HH24:MI:SS YYYY.MM.DD' | 'HH24:MI:SS.FF YYYY.MM.DD' | +-------+----------------+---------------+---------------------------+------------------------------+ | tr_TR | 'DD.MM.YYYY' | 'HH24:MI:SS' | 'HH24:MI:SS DD.MM.YYYY' | 'HH24:MI:SS.FF DD.MM.YYYY' | +-------+----------------+---------------+---------------------------+------------------------------+ | vi_VN | 'DD/MM/YYYY' | 'HH24:MI:SS' | 'HH24:MI:SS DD/MM/YYYY' | 'HH24:MI:SS.FF DD/MM/YYYY' | +-------+----------------+---------------+---------------------------+------------------------------+ | zh_CN | 'YYYY-MM-DD' | 'HH24:MI:SS' | 'HH24:MI:SS YYYY-MM-DD' | 'HH24:MI:SS.FF YYYY-MM-DD' | +-------+----------------+---------------+---------------------------+------------------------------+ .. _datetime-format1: **날짜/시간 형식 1** +----------------------+-----------------------------------------------+ | format 값 | 의미 | +======================+===============================================+ | **CC** | 세기 | +----------------------+-----------------------------------------------+ | **YYYY** | 4자리 연도, 2자리 연도 | | , **YY** | | +----------------------+-----------------------------------------------+ | **Q** | 분기(1, 2, 3, 4; 1월~3월 = 1) | +----------------------+-----------------------------------------------+ | **MM** | 월(01-12; 1월 = 01) | | | *참고: 분(minute)은 MI이다.* | +----------------------+-----------------------------------------------+ | **MONTH** | 월 이름 | +----------------------+-----------------------------------------------+ | **MON** | 축약된 월 이름 | +----------------------+-----------------------------------------------+ | **DD** | 날(1-31) | +----------------------+-----------------------------------------------+ | **DAY** | 요일 이름 | +----------------------+-----------------------------------------------+ | **DY** | 축약된 요일 이름 | +----------------------+-----------------------------------------------+ | **D** 또는 **d** | 요일(1-7) | +----------------------+-----------------------------------------------+ | **AM** 또는 **PM** | 오전/오후 | +----------------------+-----------------------------------------------+ | **A.M.** | 마침표가 포함된 오전/오후 | | 또는 **P.M.** | | +----------------------+-----------------------------------------------+ | **HH** | 시(1-12) | | 또는 **HH12** | | +----------------------+-----------------------------------------------+ | **HH24** | 시(0-23) | +----------------------+-----------------------------------------------+ | **MI** | 분(0-59) | +----------------------+-----------------------------------------------+ | **SS** | 초(0-59) | +----------------------+-----------------------------------------------+ | **FF** | 밀리초(0-999) | +----------------------+-----------------------------------------------+ | \- / , . ; : "텍스트"| 구두점과 인용구는 그대로 결과에 표현됨 | +----------------------+-----------------------------------------------+ **date_lang_string_literal 예** +--------------+--------------------------------------------+ | **형식 구성 | **date_lang_string_literal** | | 요소** | | | +------------------------------+-------------+ | | **'en_US'** | **'ko_KR'** | +==============+==============================+=============+ | **MONTH** | JANUARY | 1월 | +--------------+------------------------------+-------------+ | **MON** | JAN | 1 | +--------------+------------------------------+-------------+ | **DAY** | MONDAY | 월요일 | +--------------+------------------------------+-------------+ | **DY** | MON | 월 | +--------------+------------------------------+-------------+ | **Month** | January | 1월 | +--------------+------------------------------+-------------+ | **Mon** | Jan | 1 | +--------------+------------------------------+-------------+ | **Day** | Monday | 월요일 | +--------------+------------------------------+-------------+ | **Dy** | Mon | 월 | +--------------+------------------------------+-------------+ | **month** | january | 1월 | +--------------+------------------------------+-------------+ | **mon** | jan | 1 | +--------------+------------------------------+-------------+ | **day** | monday | 월요일 | +--------------+------------------------------+-------------+ | **Dy** | mon | 월 | +--------------+------------------------------+-------------+ | **AM** | AM | 오전 | +--------------+------------------------------+-------------+ | **Am** | Am | 오전 | +--------------+------------------------------+-------------+ | **am** | am | 오전 | +--------------+------------------------------+-------------+ | **A.M.** | A.M. | 오전 | +--------------+------------------------------+-------------+ | **A.m.** | A.m. | 오전 | +--------------+------------------------------+-------------+ | **a.m.** | a.m. | 오전 | +--------------+------------------------------+-------------+ | **PM** | PM | 오후 | +--------------+------------------------------+-------------+ | **Pm** | Pm | 오후 | +--------------+------------------------------+-------------+ | **pm** | pm | 오후 | +--------------+------------------------------+-------------+ | **P.M.** | P.M. | 오후 | +--------------+------------------------------+-------------+ | **P.m.** | P.m. | 오후 | +--------------+------------------------------+-------------+ | **p.m.** | p.m. | 오후 | +--------------+------------------------------+-------------+ **리턴 값 형식의 자릿수의 예** +-------------------------+----------------+----------------+ | 형식 구성 요소 | en_US 자릿수 | ko_KR 자릿수 | +=========================+================+================+ | **MONTH(Month, month)** | 9 | 4 | +-------------------------+----------------+----------------+ | **MON(Mon, mon)** | 3 | 2 | +-------------------------+----------------+----------------+ | **DAY(Day, day)** | 9 | 6 | +-------------------------+----------------+----------------+ | **DY(Dy, dy)** | 3 | 2 | +-------------------------+----------------+----------------+ | **HH12, HH24** | 2 | 2 | +-------------------------+----------------+----------------+ | "텍스트" | 텍스트의 길이 | 텍스트의 길이 | +-------------------------+----------------+----------------+ | 나머지 형식 | 주어진 형식의 | 주어진 형식의 | | | 길이와 같음 | 길이와 같음 | +-------------------------+----------------+----------------+ 다음은 환경 변수 **CUBRID_CHARSET**\ 을 "en_US.iso88591"로 설정하여 생성한 데이터베이스에서 수행한 예이다. .. code-block:: sql --set the initial locale as en_US.iso88591 export CUBRID_CHARSET=en_US.iso88591 --creating a table having date/time type columns CREATE TABLE datetime_tbl(a TIME, b DATE, c TIMESTAMP, d DATETIME); INSERT INTO datetime_tbl VALUES(SYSTIME, SYSDATE, SYSTIMESTAMP, SYSDATETIME); --selecting a VARCHAR type string from the data in the specified format SELECT TO_CHAR(b, 'DD, DY , MON, YYYY') FROM datetime_tbl; to_char(b, 'DD, DY , MON, YYYY') ====================== '04, THU , FEB, 2010' SELECT TO_CHAR(c, 'HH24:MI, DD, MONTH, YYYY') FROM datetime_tbl; to_char(c, 'HH24:MI, DD, MONTH, YYYY') ====================== '16:50, 04, FEBRUARY , 2010' SELECT TO_CHAR(c, 'HH24:MI:FF, DD, MONTH, YYYY') FROM datetime_tbl; ERROR: Invalid format. SELECT TO_CHAR(d, 'HH12:MI:SS:FF pm, YYYY-MM-DD-DAY') FROM datetime_tbl; to_char(d, 'HH12:MI:SS:FF pm, YYYY-MM-DD-DAY') ====================== '04:50:11:624 pm, 2010-02-04-THURSDAY ' SELECT TO_CHAR(TIMESTAMP'2009-10-04 22:23:00', 'Day Month yyyy'); to_char(timestamp '2009-10-04 22:23:00', 'Day Month yyyy') ====================== 'Sunday October 2009' 다음은 위에서 생성한 데이터베이스에서 **TO_CHAR** 함수에 언어 인자를 별도로 부여한 예이다. 문자셋이 ISO-8859-1이면 **TO_CHAR** 함수의 언어 인자를 "tr_TR"과 "ko_KR"로 설정하는 것은 허용하나, 다른 언어는 허용하지 않는다. **TO_CHAR** 의 언어 인자로 모든 언어를 사용 가능하게 하려면 데이터베이스 생성 시 문자셋이 UTF8이어야 한다. .. code-block:: sql SELECT TO_CHAR(TIMESTAMP'2009-10-04 22:23:00', 'Day Month yyyy','ko_KR'); to_char(timestamp '2009-10-04 22:23:00', 'Day Month yyyy', 'ko_KR') ====================== 'Iryoil 10wol 2009' SELECT TO_CHAR(TIMESTAMP'2009-10-04 22:23:00', 'Day Month yyyy','tr_TR'); to_char(timestamp '2009-10-04 22:23:00', 'Day Month yyyy', 'tr_TR') ====================== 'Pazar Ekim 2009' .. note:: * 환경 변수인 **CUBRID_CHARSET** 의 로캘 값을 "en_US"(CUBRID 제품 설치 시 **CUBRID_CHARSET** 의 초기 값)로 설정하고 "." 이하의 문자셋 정보를 생략하는 경우, 문자셋은 ISO-8859-1(.iso88591)로 정해진다. 즉, **CUBRID_CHARSET** 의 로캘 값으로 "en_US"를 설정하는 것과 "en_US.iso88591"을 설정하는 것은 같다. * 언어에 따라 월 이름, 일 이름, 요일 이름, 오전/오후 이름의 해석이 변경되는 함수에서 문자셋이 ISO-8859-1인 경우 "en_US" 외에 변경할 수 있는 언어는 "ko_KR"과 "tr_TR"뿐이다(위의 예 참고). 다만, 문자셋이 UTF-8인 경우 CUBRID가 지원하는 모든 언어 중 하나로 변경할 수 있다. 시스템 파라미터 **intl_date_lang** 을 설정하거나 **TO_CHAR** 함수의 언어 인자를 지정하여 CUBRID가 지원하는 모든 언어(위 구문의 *date_lang_string_literal* 참고) 중 하나로 변경할 수 있다. 언어에 따라 날짜/시간 형식의 해석이 변경되는 함수들의 목록은 시스템 파라미터 **intl_date_lang** 의 설명을 참고한다. .. code-block:: sql -- change date locale as "de_DE" and run above query. -- This case is failed because database locale, 'en_US'’s charset is ISO-8859-1 -- and 'de_DE' only supports UTF-8 charset. SELECT TO_CHAR(TIMESTAMP'2009-10-04 22:23:00', 'Day Month yyyy','de_DE'); ERROR: before ' , 'Day Month yyyy','de_DE'); ' Locales for language 'de_DE' are not available with charset 'iso8859-1'. 다음은 환경 변수 **CUBRID_CHARSET** 을 "en_US.utf8"로 설정하고 생성한 데이터베이스에서 **TO_CHAR** 함수에 언어 인자를 "de_DE"로 지정하고 실행한 예이다. .. code-block:: sql SELECT TO_CHAR(TIMESTAMP'2009-10-04 22:23:00', 'Day Month yyyy','de_DE'); to_char(timestamp '2009-10-04 22:23:00', 'Day Month yyyy', 'de_DE') ====================== 'Sonntag Oktober 2009' TO_CHAR(number) ================ .. function:: TO_CHAR(number[, format[, number_lang_string_literal ] ]) **TO_CHAR** (number) 함수는 수치형 데이터 타입을 :ref:`숫자 형식 `\ 에 맞는 문자열로 변환하여 **VARCHAR** 타입으로 반환한다. :param number: 숫자를 반환하는 수치형 데이터 타입의 연산식을 지정한다. 입력값이 NULL이면 결과로 NULL이 반환된다. 입력값이 문자열 타입이면 해당 문자열을 그대로 반환한다. :param format: 리턴 값의 형식을 지정한다. 값이 **NULL**\ 인 경우에는 **NULL**\ 이 반환된다. :param number_lang_string_literal: 입력 숫자를 출력할 때 적용할 언어를 지정한다. :rtype: STRING *format* 인자가 지정되면 지정한 언어에 맞는 형식으로 *number*\ 를 출력한다. 이때 언어는 *number_lang_string_literal* 인자에 의해 정해진다. *number_lang_string_literal* 인자가 생략되면 **intl_number_lang** 시스템 파라미터에 지정한 언어가 적용되며, **intl_number_lang** 값의 설정이 생략되면 **CUBRID_CHARSET** 환경변수에 지정한 언어가 적용된다. 예를 들어 언어가 "de_DE"나 "fr_FR"과 같은 유럽 국가의 언어이면 "."를 숫자의 자릿수 구분 기호로 출력하고 ","를 소수점 기호로 출력한다. 주어진 문자열과 대응하지 않는 *format* 인자가 지정되면 에러를 반환한다. *format* 인자가 생략되면 **intl_number_lang** 또는 **CUBRID_CHARSET** 에 의해 설정된 언어의 기본 출력에 따라 *number* 를 문자열로 출력한다(:ref:`언어별 숫자의 기본 출력 ` 표 참고). .. _tochar-number-format: **숫자 형식** +-------------------+----------+-------------------------------------------------------------------------------------------------------------------------------+ | 형식 구성 요소 | 예제 | 설명 | +===================+==========+===============================================================================================================================+ | **9** | 9999 | "9"의 개수는 반환될 유효숫자 자릿수를 나타낸다. | | | | 숫자 인자에 대해 형식에서 지정된 유효숫자 자릿수가 부족하면, 소수부에 대해서는 반올림 연산을 수행한다. | | | | 숫자 인자의 정수부 자릿수보다 유효숫자 자릿수가 부족하면 #을 출력한다. | +-------------------+----------+-------------------------------------------------------------------------------------------------------------------------------+ | **0** | 0999 | 형식에서 지정된 유효숫자 자릿수가 충분한 경우, 정수부 앞 부분을 공백이 아닌 0으로 채워 반환한다. | +-------------------+----------+-------------------------------------------------------------------------------------------------------------------------------+ | **S** | S9999 | 지정된 위치에 양수/음수 부호를 출력한다. 부호는 문자열의 시작부분에만 사용할 수 있다. | +-------------------+----------+-------------------------------------------------------------------------------------------------------------------------------+ | **C** | C9999 | 지정된 위치에 ISO 통화 기호를 반환한다. | +-------------------+----------+-------------------------------------------------------------------------------------------------------------------------------+ | **,** | 9,999 | 지정된 위치에 쉼표(",")를 반환한다. 언어의 설정에 따라 쓰임이 달라지는데, 자릿수 구분 기호로 사용될 경우 여러 개가 허용되며, | | (쉼표) | | 소수점 기호로 사용될 경우 한 개만 허용된다. :ref:`언어별 숫자의 기본 출력 ` 표 참고 | +-------------------+----------+-------------------------------------------------------------------------------------------------------------------------------+ | **.** | 9.999 | 지정된 위치에 마침표를 출력한다. 언어의 설정에 따라 쓰임이 달라지는데, 자릿수 구분 기호로 사용될 경우 여러 개가 허용되며, | | (마침표) | | 소수점 기호로 사용될 경우 한 개만 허용된다. :ref:`언어별 숫자의 기본 출력 ` 표 참고 | +-------------------+----------+-------------------------------------------------------------------------------------------------------------------------------+ | **EEEE** | 9.99EEEE | 과학적 기수법(scientific notation)을 반환한다. | +-------------------+----------+-------------------------------------------------------------------------------------------------------------------------------+ .. _tochar-default-number-format: **언어별 숫자의 기본 출력** +------------+------------------+------------------+---------------+------------------+ | 언어 | 언어의 로캘 이름 | 자릿수 구분 기호 | 소수점 기호 | 숫자 표기 예 | +============+==================+==================+===============+==================+ | 영어 | en_US | ,(쉼표) | .(마침표) | 123,456,789.012 | +------------+------------------+------------------+---------------+------------------+ | 독일어 | de_DE | .(마침표) | ,(쉼표) | 123.456.789.012 | +------------+------------------+------------------+---------------+------------------+ | 스페인어 | es_ES | .(마침표) | ,(쉼표) | 123.456.789.012 | +------------+------------------+------------------+---------------+------------------+ | 프랑스어 | fr_FR | .(마침표) | ,(쉼표) | 123.456.789.012 | +------------+------------------+------------------+---------------+------------------+ | 이태리어 | it_IT | .(마침표) | ,(쉼표) | 123.456.789.012 | +------------+------------------+------------------+---------------+------------------+ | 일본어 | ja_JP | ,(쉼표) | .(마침표) | 123,456,789.012 | +------------+------------------+------------------+---------------+------------------+ | 캄보디아어 | km_KH | .(마침표) | ,(쉼표) | 123.456.789.012 | +------------+------------------+------------------+---------------+------------------+ | 한국어 | ko_KR | ,(쉼표) | .(마침표) | 123,456,789.012 | +------------+------------------+------------------+---------------+------------------+ | 터키어 | tr_TR | .(마침표) | ,(쉼표) | 123.456.789.012 | +------------+------------------+------------------+---------------+------------------+ | 베트남어 | vi_VN | .(마침표) | ,(쉼표) | 123.456.789.012 | +------------+------------------+------------------+---------------+------------------+ | 중국어 | zh_CN | ,(쉼표) | .(마침표) | 123,456,789.012 | +------------+------------------+------------------+---------------+------------------+ 다음은 환경 변수 **CUBRID_CHARSET** 의 로캘 값을 "en_US.utf8"로 설정하여 생성한 데이터베이스에서 수행한 예이다. .. code-block:: sql --selecting a string casted from a number in the specified format SELECT TO_CHAR(12345,'S999999'), TO_CHAR(12345,'S099999'); to_char(12345, 'S999999') to_char(12345, 'S099999') ============================================ ' +12345' '+012345' SELECT TO_CHAR(1234567,'C9,999,999,999'); to_char(1234567, 'C9,999,999,999') ====================== ' $1,234,567' SELECT TO_CHAR(1234567,'C9.999.999.999'); to_char(1234567, 'C9.999.999.999') ====================== '##############' SELECT TO_CHAR(123.4567,'99'), TO_CHAR(123.4567,'999.99999'), TO_CHAR(123.4567,'99999.999'); to_char(123.4567, '99') to_char(123.4567, '999.99999') to_char(123.4567, '99999.999') ================================================================== '##' '123.45670' ' 123.457' 다음은 시스템 파라미터 **intl_number_lang** 의 값을 "de_DE"로 설정하고 수행한 예이다. 독일, 프랑스 등 유럽 국가 대부분의 숫자 출력 형식은 "."가 자릿수 구분 기호이고, ","가 소수점 기호이다. .. code-block:: sql csql> ;se intl_number_lang="de_DE" intl_number_lang="de_DE" --selecting a string casted from a number in the specified format SELECT TO_CHAR(12345,'S999999'), TO_CHAR(12345,'S099999'); to_char(12345, 'S999999') to_char(12345, 'S099999') ============================================ ' +12345' '+012345' SELECT TO_CHAR(1234567,'C9,999,999,999'); to_char(1234567, 'C9,999,999,999') ====================== '##############' SELECT TO_CHAR(1234567,'C9.999.999.999'); to_char(1234567, 'C9.999.999.999') ====================== ' EUR1.234.567' SELECT TO_CHAR(123.4567,'99'), TO_CHAR(123.4567,'999,99999'), TO_CHAR(123.4567,'99999,999'); to_char(123.4567, '99') to_char(123.4567, '999,99999') to_char(123.4567, '99999,999') ================================================================== '##' '123,45670' ' 123,457' SELECT TO_CHAR(123.4567,'99','en_US'), TO_CHAR(123.4567,'999.99999','en_US'), TO_CHAR(123.4567,'99999.999','en_US'); to_char(123.4567, '99', 'en_US') to_char(123.4567, '999.99999', 'en_US') to_char(123.4567, '99999.999', 'en_US') ========================================================== '##' '123.45670' ' 123.457' SELECT TO_CHAR(1.234567,'99.999EEEE','en_US'), TO_CHAR(1.234567,'99,999EEEE','de_DE'), to_char(123.4567); to_char(1.234567, '99.999EEEE', 'en_US') to_char(1.234567, '99,999EEEE', 'de_DE') to_char(123.4567) ================================================================== '1.235E+00' '1,235E+00' '123,4567' TO_DATE ======= .. function:: TO_DATE(string [,format [,date_lang_string_literal]]) **TO_DATE** 함수는 인자로 지정된 날짜 형식을 기준으로 문자열을 해석하여, 이를 **DATE** 타입의 값으로 변환하여 반환한다. 날짜 형식은 :ref:`날짜/시간 형식 1 `\ 을 참고한다. :param string: 문자열을 반환하는 임의의 연산식이다. 값이 NULL이면 결과로 NULL이 반환된다. :param format: 날짜 타입으로 변환할 값의 형식을 지정하며, :ref:`날짜/시간 형식 1 ` 표를 참고한다. 값이 **NULL**\ 이면 결과로 **NULL**\ 이 반환된다. :param date_lang_string_literal: 입력 값에 적용할 언어를 지정한다. :rtype: DATE *format* 인자가 지정되면 지정한 언어에 맞는 형식으로 *string* 을 해석한다. 예를 들어 언어가 "de_DE"일 때 *string* 이 "12.mai.2012"이고 *format* 이 "DD.mon.YYYY"인 경우 "2012년 5월 12일"로 해석한다. 이때 언어는 *date_lang_string_literal* 인자에 의해 정해진다. *date_lang_string_literal* 인자가 생략되면 **intl_date_lang** 시스템 파라미터에 지정한 언어가 적용되며, **intl_date_lang** 값의 설정이 생략되면 **CUBRID_CHARSET** 환경변수에 지정한 언어가 적용된다. 주어진 문자열과 대응하지 않는 *format* 인자가 지정되면 에러를 반환한다. *format* 인자가 생략되면 **intl_date_lang** 또는 **CUBRID_CHARSET** 에 의해 설정된 언어의 기본 출력 형식을 따라 *string* 을 해석한다(:ref:`날짜/시간 타입에 대한 언어별 기본 출력 형식` 표 참고). 예를 들어 언어가 "de_DE"일 때 **DATE** 타입의 기본 형식은 "DD.MM.YYYY"이다. 다음은 환경 변수 **CUBRID_CHARSET** 을 "en_US"로 설정하여 수행하는 예이다. .. code-block:: sql --selecting a date type value casted from a string in the specified format SELECT TO_DATE('12/25/2008'); to_date('12/25/2008') =============================================== 12/25/2008 SELECT TO_DATE('25/12/2008', 'DD/MM/YYYY'); to_date('25/12/2008', 'DD/MM/YYYY') =============================================== 12/25/2008 SELECT TO_DATE('081225', 'YYMMDD'); to_date('081225', 'YYMMDD', 'en_US') =============================================== 12/25/2008 SELECT TO_DATE('2008-12-25', 'YYYY-MM-DD'); to_date('2008-12-25', 'YYYY-MM-DD', 'en_US') =============================================== 12/25/2008 다음은 **intl_date_lang** 의 값이 "de_DE"일 때 **TO_DATE** 를 수행하는 예이다. .. code-block:: sql SELECT TO_DATE('25.12.2012'); to_date('25.12.2012') ======================== 12/25/2012 SELECT TO_DATE('12/mai/2012','dd/mon/yyyy', 'de_DE'); to_date('12/mai/2012', 'dd/mon/yyyy') ======================================== 05/12/2012 .. note:: * 환경 변수인 **CUBRID_CHARSET** 의 로캘 값을 언어만 "en_US"(CUBRID 제품 설치 시 **CUBRID_CHARSET** 의 초기 값)로 설정하고 "." 이하의 문자셋을 생략하는 경우, 문자셋은 ISO-8859-1(.iso88591)로 정해진다. * 문자셋이 ISO-8859-1인 경우 "en_US" 외에 **TO_DATE** 함수에서 변경할 수 있는 언어는 "ko_KR"과 "tr_TR"뿐이다. 문자셋이 UTF-8인 경우 CUBRID가 지원하는 모든 언어 중 하나로 변경할 수 있다. 보다 자세한 설명은 :func:`TO_CHAR` 를 참고한다. TO_DATETIME =========== .. function:: TO_DATETIME (string [,format [,date_lang_string_literal]]) **TO_DATETIME** 함수는 인자로 지정된 **DATETIME** 형식을 기준으로 문자열을 해석하여, 이를 **DATETIME** 타입의 값으로 변환하여 반환한다. **DATETIME** 형식은 :func:`TO_CHAR` 함수의 :ref:`날짜/시간 형식 1 `\ 을 참고한다. :param string: 문자열을 반환하는 임의의 연산식이다. 값이 NULL이면 결과로 NULL이 반환된다. :param format: DATETIME 타입으로 변환할 값의 형식을 지정하며, :ref:`날짜/시간 형식 1 `\을 참고한다. 값이 **NULL** 이면 결과로 **NULL** 이 반환된다. :param date_lang_string_literal: 입력 값에 적용할 언어를 지정한다. :rtype: DATETIME *format* 인자가 지정되면 지정한 언어에 맞는 형식으로 *string* 을 해석한다. 예를 들어 언어가 "de_DE"일 때 *string*\ 이 "12/mai/2012 12:10:00 Nachm."이고 *format*\ 이 "DD/MON/YYYY HH:MI:SS AM"인 경우 "2012년 5월 12일 오후 12시 10분 0초"로 해석한다. 이때 언어는 *date_lang_string_literal* 인자에 의해 정해진다. *date_lang_string_literal* 인자가 생략되면 **intl_date_lang** 시스템 파라미터에 지정한 언어가 적용되며, **intl_date_lang** 값의 설정이 생략되면 **CUBRID_CHARSET** 환경변수에 지정한 언어가 적용된다. 주어진 문자열과 대응하지 않는 *format* 인자가 지정되면 에러를 반환한다. *format* 인자가 생략되면 **intl_date_lang** 또는 **CUBRID_CHARSET** 에 의해 설정된 언어의 기본 출력 형식을 따라 *string* 을 해석한다(:ref:`날짜/시간 타입에 대한 언어별 기본 출력 형식` 표 참고). 예를 들어 언어가 "de_DE"일 때 **DATETIME** 타입의 기본 형식은 "HH24:MI:SS.FF DD.MM.YYYY"이다. .. note:: CUBRID 9.0 미만 버전에서 사용되었던 **CUBRID_DATE_LANG** 환경 변수는 더 이상 사용되지 않는다. 다음은 환경 변수 **CUBRID_CHARSET**\ 의 로캘 값을 "en_US"로 설정하여 생성된 데이터베이스에서 수행하는 예이다. .. code-block:: sql --selecting a datetime type value casted from a string in the specified format SELECT TO_DATETIME('13:10:30 12/25/2008'); to_datetime('13:10:30 12/25/2008') ===================================== 01:10:30.000 PM 12/25/2008 SELECT TO_DATETIME('08-Dec-25 13:10:30.999', 'YY-Mon-DD HH24:MI:SS.FF'); to_datetime('08-Dec-25 13:10:30.999', 'YY-Mon-DD HH24:MI:SS.FF') ===================================== 01:10:30.999 PM 12/25/2008 SELECT TO_DATETIME('DATE: 12-25-2008 TIME: 13:10:30.999', '"DATE:" MM-DD-YYYY "TIME:" HH24:MI:SS.FF'); to_datetime('DATE: 12-25-2008 TIME: 13:10:30.999', '"DATE:" MM-DD-YYYY "TIME:" HH24:MI:SS.FF') ===================================== 01:10:30.999 PM 12/25/2008 다음은 **intl_date_lang** 의 값이 "de_DE"일 때 수행한 예이다. .. code-block:: sql SELECT TO_DATETIME('13:10:30.999 25.12.2012'); to_datetime('13:10:30.999 25.12.2012') ========================================= 01:10:30.999 PM 12/25/2012 SELECT TO_DATETIME('12/mai/2012 12:10:00 Nachm.','DD/MON/YYYY HH:MI:SS AM', 'de_DE'); to_datetime('12/mai/2012 12:10:00 Nachm.', 'DD/MON/YYYY HH:MI:SS AM', 'de_DE') ================================================================================= 12:10:00.000 PM 05/12/2012 .. note:: * 환경 변수인 **CUBRID_CHARSET** 의 로캘 값을 언어만 "en_US"(CUBRID 제품 설치 시 **CUBRID_CHARSET** 의 초기 값)로 설정하고 "." 이하의 문자셋을 생략하는 경우, 문자셋은 ISO-8859-1(.iso88591)로 정해진다. * 문자셋이 ISO-8859-1인 경우 "en_US" 외에 **TO_DATETIME** 함수에서 변경할 수 있는 언어는 "ko_KR"과 "tr_TR"뿐이다. 문자셋이 UTF-8인 경우 CUBRID가 지원하는 모든 언어 중 하나로 변경할 수 있다. 보다 자세한 설명은 :func:`TO_CHAR` 를 참고한다. TO_NUMBER ========= .. function:: TO_NUMBER(string [, format ]) **TO_NUMBER** 함수는 인자로 지정된 숫자 형식을 기준으로 문자열을 해석하여, 이를 **NUMERIC** 타입으로 변환하여 반환한다. :param string: 문자열을 반환하는 임의의 연산식이다. 값이 NULL이면 결과로 NULL이 반환된다. :param format: 숫자로 반환할 값의 형식을 지정하며, :ref:`숫자 형식 ` 표를 참고한다. 값이 **NULL** 이면 결과로 **NULL** 이 반환된다. :rtype: NUMERIC *format* 인자가 지정되면 지정한 언어에 맞는 형식으로 *string* 을 해석한다. 이때 언어는 *date_lang_string_literal* 인자에 의해 정해진다. *date_lang_string_literal* 인자가 생략되면 **intl_date_lang** 시스템 파라미터에 지정한 언어가 적용되며, **intl_date_lang** 값의 설정이 생략되면 **CUBRID_CHARSET** 환경변수에 지정한 언어가 적용된다. 예를 들어 언어가 "de_DE"나 "fr_FR"과 같은 유럽 국가의 언어이면 "."를 숫자의 자릿수 구분 기호로 해석하고 ","를 소수점 기호로 해석한다. 주어진 문자열과 대응하지 않는 *format* 인자가 지정되면 에러를 반환한다. *format* 인자가 생략되면 **intl_date_lang** 또는 **CUBRID_CHARSET** 에 의해 설정된 언어의 기본 출력 형식을 따라 *string* 을 해석한다(:ref:`언어별 숫자의 기본 출력 ` 표 참고). 다음은 환경 변수 **CUBRID_CHARSET** 의 로캘 값이 "en_US"인 데이터베이스에서 수행하는 예이다. .. code-block:: sql --selecting a number casted from a string in the specified format SELECT TO_NUMBER('-1234'); to_number('-1234') ============================================ -1234 SELECT TO_NUMBER('12345','999999'); to_number('12345', '999999') ============================================ 12345 SELECT TO_NUMBER('$12,345.67','C99,999.999'); to_number('$12,345.67', 'C99,999.999') ====================== 12345.670 SELECT TO_NUMBER('12345.67','99999.999'); to_number('12345.67', '99999.999') ============================================ 12345.670 다음은 시스템 파라미터 **intl_number_lang** 의 값을 "de_DE"로 설정하여 실행한 예이다. 독일, 프랑스 등 유럽 국가에서는 숫자의 자릿수 구분 기호로 마침표가 사용되며, 소수점 기호로 쉼표가 사용된다. .. code-block:: sql csql> ;se intl_number_lang="de_DE" intl_number_lang="de_DE" SELECT TO_NUMBER('12.345,67','99.999,999'); to_number('12.345,67', '99.999,999') ====================== 12345.670 TO_TIME ======= .. function:: TO_TIME(string [,format [,date_lang_string_literal]]) **TO_TIME** 함수는 인자로 지정된 시간 형식을 기준으로 문자열을 해석하여, 이를 TIME 타입의 값으로 변환하여 반환한다. 시간 형식은 :ref:`날짜/시간 형식 1 `\ 을 참고한다. :param string: 문자열을 반환하는 임의의 연산식이다. 값이 NULL이면 결과로 NULL이 반환된다. :param format: TIME 타입으로 변환할 값의 형식을 지정하며, :ref:`날짜/시간 형식 1 ` 표를 참고한다. 값이 **NULL** 이면 결과로 **NULL** 이 반환된다. :param date_lang_string_literal: 입력 값에 적용할 언어를 지정한다. :rtype: TIME *format* 인자가 지정되면 지정한 언어에 맞는 형식으로 *string* 을 해석한다. 예를 들어 언어가 "de_DE"일 때 *string* 이 "10:23:00 Nachm."이고 *format* 이 "HH:MI:SS AM"인 경우 "오후 10시 23분 0초"로 해석한다. 이때 언어는 *date_lang_string_literal* 인자에 의해 정해진다. *date_lang_string_literal* 인자가 생략되면 **intl_date_lang** 시스템 파라미터에 지정한 언어가 적용되며, **intl_date_lang** 값의 설정이 생략되면 **CUBRID_CHARSET** 환경변수에 지정한 언어가 적용된다. 주어진 문자열과 대응하지 않는 *format* 인자가 지정되면 에러를 반환한다. *format* 인자가 생략되면 **intl_date_lang** 또는 **CUBRID_CHARSET** 에 의해 설정된 언어의 기본 출력 형식을 따라 *string* 을 해석한다(:ref:`날짜/시간 타입에 대한 언어별 기본 출력 형식` 표 참고). 예를 들어 언어가 "de_DE"일 때 **TIME** 타입의 기본 형식은 "HH24:MI:SS"이다. .. note:: CUBRID 9.0 미만 버전에서 사용되었던 **CUBRID_DATE_LANG** 환경 변수는 더 이상 사용되지 않는다. 다음은 환경 변수 **CUBRID_CHARSET** 의 로캘 값을 "en_US"로 설정하여 생성된 데이터베이스에서 수행하는 예이다. .. code-block:: sql --selecting a time type value casted from a string in the specified format SELECT TO_TIME ('13:10:30'); to_time('13:10:30') ============================================= 01:10:30 PM SELECT TO_TIME('HOUR: 13 MINUTE: 10 SECOND: 30', '"HOUR:" HH24 "MINUTE:" MI "SECOND:" SS'); to_time('HOUR: 13 MINUTE: 10 SECOND: 30', '"HOUR:" HH24 "MINUTE:" MI "SECOND:" SS', 'en_US') ============================================= 01:10:30 PM SELECT TO_TIME ('13:10:30', 'HH24:MI:SS'); to_time('13:10:30', 'HH24:MI:SS') ============================================= 01:10:30 PM SELECT TO_TIME ('13:10:30', 'HH12:MI:SS'); ERROR: Conversion error in date format. 다음은 **intl_date_lang** 의 값이 "de_DE"일 때 수행하는 예이다. .. code-block:: sql SELECT TO_TIME('13:10:30'); to_time('13:10:30') ====================== 01:10:30 PM SELECT TO_TIME('10:23:00 Nachm.', 'HH:MI:SS AM'); to_time('10:23:00 Nachm.', 'HH:MI:SS AM') ============================================== 10:23:00 PM .. note:: * 환경 변수인 **CUBRID_CHARSET** 의 로캘 값을 언어만 "en_US"(CUBRID 제품 설치 시 **CUBRID_CHARSET** 의 초기 값)로 설정하고 "." 이하의 문자셋을 생략하는 경우, 문자셋은 ISO-8859-1(.iso88591)로 정해진다. * 문자셋이 ISO-8859-1인 경우 "en_US" 외에 **TO_TIME** 함수에서 변경할 수 있는 언어는 "ko_KR"과 "tr_TR"뿐이다. 문자셋이 UTF-8인 경우 CUBRID가 지원하는 모든 언어 중 하나로 변경할 수 있다. 보다 자세한 설명은 :func:`TO_CHAR` 를 참고한다. TO_TIMESTAMP ============ .. function:: TO_TIMESTAMP(string [, format [,date_lang_string_literal]]) **TO_TIMESTAMP** 함수는 인자로 지정된 타임스탬프 형식을 기준으로 문자열을 해석하여, 이를 **TIMESTAMP** 타입의 값으로 변환하여 반환한다. 타임스탬프 형식은 :ref:`날짜/시간 형식 1 `\ 을 참고한다. :param string: 문자열을 반환하는 임의의 연산식이다. 값이 NULL이면 결과로 NULL이 반환된다. :param format: TIMESTAMP 타입으로 변환할 값의 형식을 지정하며, :ref:`날짜/시간 형식 1 ` 표를 참고한다. 값이 **NULL** 이면 결과로 **NULL** 이 반환된다. :param date_lang_string_literal: 입력 값에 적용할 언어를 지정한다. :rtype: TIMESTAMP *format* 인자가 지정되면 지정한 언어에 맞는 형식으로 *string* 을 해석한다. 예를 들어 언어가 "de_DE"일 때 *string* 이 "12/mai/2012 12:10:00 Nachm."이고 *format* 이 "DD/MON/YYYY HH:MI:SS AM"인 경우 "2012년 5월 12일 오후 12시 10분 0초"로 해석한다. 이때 언어는 *date_lang_string_literal* 인자에 의해 정해진다. *date_lang_string_literal* 인자가 생략되면 **intl_date_lang** 시스템 파라미터에 지정한 언어가 적용되며, **intl_date_lang** 값의 설정이 생략되면 **CUBRID_CHARSET** 환경변수에 지정한 언어가 적용된다. 주어진 문자열과 대응하지 않는 *format* 인자가 지정되면 에러를 반환한다. *format* 인자가 생략되면 **intl_date_lang** 또는 **CUBRID_CHARSET** 에 의해 설정된 언어의 기본 출력 형식을 따라 *string* 을 해석한다(:ref:`날짜/시간 타입에 대한 언어별 기본 출력 형식` 표 참고). 예를 들어 언어가 "de_DE"일 때 **TIMESTAMP** 타입의 기본 형식은 "HH24:MI:SS DD.MM.YYYY"이다. 다음은 환경 변수 **CUBRID_CHARSET** 값을 "en_US"로 설정하여 생성된 데이터베이스에서 수행하는 예이다. .. code-block:: sql --selecting a timestamp type value casted from a string in the specified format SELECT TO_TIMESTAMP('13:10:30 12/25/2008'); to_timestamp('13:10:30 12/25/2008') ====================================== 01:10:30 PM 12/25/2008 SELECT TO_TIMESTAMP('08-Dec-25 13:10:30', 'YY-Mon-DD HH24:MI:SS'); to_timestamp('08-Dec-25 13:10:30', 'YY-Mon-DD HH24:MI:SS') ====================================== 01:10:30 PM 12/25/2008 SELECT TO_TIMESTAMP('YEAR: 2008 DATE: 12-25 TIME: 13:10:30', '"YEAR:" YYYY "DATE:" MM-DD "TIME:" HH24:MI:SS'); to_timestamp('YEAR: 2008 DATE: 12-25 TIME: 13:10:30', '"YEAR:" YYYY "DATE:" MM-DD "TIME:" HH24:MI:SS') ====================================== 01:10:30 PM 12/25/2008 다음은 **intl_date_lang** 의 값이 "de_DE"일 때 수행한 예이다. .. code-block:: sql SELECT TO_TIMESTAMP('13:10:30 25.12.2008'); to_timestamp('13:10:30 25.12.2008') ====================================== 01:10:30 PM 12/25/2008 SELECT TO_TIMESTAMP('10:23:00 Nachm.', 'HH12:MI:SS AM'); to_timestamp('10:23:00 Nachm.', 'HH12:MI:SS AM') =================================================== 10:23:00 PM 08/01/2012 .. note:: * 환경 변수인 **CUBRID_CHARSET** 의 로캘 값을 언어만 "en_US"(CUBRID 제품 설치 시 **CUBRID_CHARSET** 의 초기 값)로 설정하고 "." 이하의 문자셋을 생략하는 경우, 문자셋은 ISO-8859-1(.iso88591)로 정해진다. * 문자셋이 ISO-8859-1인 경우 "en_US" 외에 **TO_TIMESTAMP** 함수에서 변경할 수 있는 언어는 "ko_KR"과 "tr_TR"뿐이다. 문자셋이 UTF-8인 경우 CUBRID가 지원하는 모든 언어 중 하나로 변경할 수 있다. 보다 자세한 설명은 :func:`TO_CHAR` 를 참고한다.